package com.party.core.service.order;

import com.party.common.paging.Page;
import com.party.core.model.order.OrderForm;
import com.party.core.service.IBaseService;

import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * 商品订单服务接口
 * party
 * Created by wei.li
 * on 2016/9/18 0018.
 */
public interface IOrderFormService extends IBaseService<OrderForm>{

	/**
	 * 获取订单
	 * @param goodsId 商品
	 * @param memberId 用户
	 * @param isPay true表示查已支付的订单 false表示查该商品的有效订单
	 * @return
	 */
	List<OrderForm> getOrder(String goodsId, String memberId, Boolean isPay);

	/**
	 * 计算一共购买份数
	 * @param goodsId 商品
	 * @param memberId 用户
	 * @param isPay true表示查已支付的订单 false表示查该商品的有效订单
	 * @return
	 */
	int calculateBuyNum(String goodsId, String memberId, Boolean isPay, Integer type);

	int calculateBuyNum(String goodsId, String memberId, Boolean isPay, Integer type, Set<Integer> status);

	List<OrderForm> listPage(OrderForm orderForm, Page page, Set<Integer> status);

	/**
	 * web端
	 * @param orderForm
	 * @param params
	 * @param page
	 * @return
	 */
	List<OrderForm> webListPage(OrderForm orderForm, Map<String, Object> params, Page page);

	/**
	 * 作废订单列表
	 * @return 作废订单列表
	 */
	List<OrderForm> invalidList();

	/**
	 * 获取总金额
	 * @param orderForm
	 * @return
	 */
	Double getTotalPayment(OrderForm orderForm, Map<String, Object> params);

	/**
	 * 分销订单
	 * @param orderForm 订单信息
	 * @param params 查询参数
	 * @param page 分页参数
	 * @return 订单列表
	 */
	List<OrderForm> distributorListPage(OrderForm orderForm, Map<String, Object> params, Page page);

	/**
	 * 统计每天的下单了
	 * @param startDate 开始时间
	 * @param endDate 结束时间
	 * @return 统计结果
	 */
	List<HashMap<String, Object>> countByDate(String startDate, String endDate);


	/**
	 * 统计每天下单
	 * @param startDate 开始时间
	 * @param endDate 结束时间
	 * @param memberId 会员编号
	 * @return 统计结果
	 */
	List<HashMap<String, Object>> countByDate(String startDate, String endDate, String memberId);


	/**
	 * 查询所有统计
	 * @return 统计数
	 */
	Integer allCount();

	/**
	 * 查询所有有效的统计数
	 * @return 统计数
	 */
	Integer allValidCount();

	/**
	 * 统计下单量
	 * @param startDate 开始时间
	 * @param endDate 结束时间
	 * @param memberId 会员编号
	 * @param isCopartner
     * @return 统计结果
	 */
	Integer count(String startDate, String endDate, String memberId, boolean isCopartner);

	/**
	 * 统计下单量
	 * @param memberId 会员编号
	 * @param isCopartner 是否是合作商
	 * @return 统计结果
	 */
	Integer count(String memberId, boolean isCopartner);


	/**
	 * 统计订单金额
	 * @param startDate 开始时间
	 * @param endDate 结束时间
	 * @param memberId 会员编号
	 * @param isCopartner
	 * @return 统计金额
	 */
	Double paymentSum(String startDate, String endDate, String memberId, boolean isCopartner);

	/**
	 * 统计订单金额
	 * @param memberId 会员编号
	 * @param isCopartner 是否合伙人
	 * @return 统计金额
	 */
	Double paymentSum(String memberId, boolean isCopartner);

	/**
	 * 统计订单金额
	 * @param startDate 开始时间
	 * @param endDate 结束时间
	 * @param memberId 会员编号
	 * @return 统计金额
	 */
	List<HashMap<String, Double>> paymentSumByDate(String startDate, String endDate, String memberId);

    OrderForm getOrderByCondition(OrderForm t, Map<String, Object> params);

	/**
	 * 统计众筹项目的订单数和累计金额
	 *
	 * @param activityId
	 * @return
	 */
	Map<String,Object> getZcActivityOrder(String activityId);

	/**
	 * web端
	 * @param orderForm
	 * @param params
	 * @param page
	 * @return
	 */
	List<OrderForm> newWebListPage(OrderForm orderForm, Map<String, Object> params);

	List<OrderForm> newWebListPageNew(OrderForm orderForm, Map<String, Object> params);

	/**
	 * web端查询总数
	 * @param orderForm
	 * @param params
	 * @return
	 */
    Integer newWebListCount(OrderForm orderForm, Map<String, Object> params);

	Integer newWebListCountNew(OrderForm orderForm, Map<String, Object> params);

	/**
	 * 已取消订单
	 *
	 * @return 订单集合
	 */
	List<String> getCanceledList();

	/**
	 * 超过二十四小时的待支付订单
	 *
	 * @return 订单集合
	 */
	List<String> getNotPayList();

	/**
	 * 获取众筹主题订单数据
	 *
	 * @param eventId 主题编号
	 * @return
	 */
	Double getOrderData(String eventId, Integer status,Integer payType);

/*	*//**
	 * 获取众筹主题直接付款订单数据
	 *
	 * @param eventId 主题编号
	 * @return
	 *//*
	Double getDpOrderData(String eventId, Integer status);*/


	/**
	 * 统计众筹活动的累计订单数，累计资金数
	 *
	 * @param activityId 活动编号
	 * @return
	 */
	Map<String, Object> statisticZcActivityData(String activityId);

	/**
	 * 统计普通活动的累计订单数，累计资金数
	 *
	 * @param activityId 活动编号
	 * @return
	 */
	Map<String, Object> statisticActivityData(String activityId);

    Map<String, Object> disCount(String memberId, String startDate, String endDate);

    Double getDisMoney(String relationId, Integer status);

    List<String> listPageForSubInfo(Integer type, Integer offset, Integer limit);

	Integer countForSubInfo(Integer type);

	List<Map<String,Object>> queryMerchantDatas(Map<String,Object> params);

	/**
	 * @param eventId
	 * @return java.util.List<java.lang.String>
	 * @Author yifeng
	 * @Description 获取主题的商户编号
	 * @Date 16:36 2019/1/19
	 **/
	List<Map<String,Object>> distinctMerchantId(String eventId);

	/**
	 * @Author yifeng
	 * @Description 机构在赛事服务的金额
	 * @Date 18:06 2019/1/24
	 * @param txzMerchantId
	 * @return java.util.List<java.util.Map<java.lang.String,java.lang.Object>>
	 **/
	List<Map<String, Object>> getTxzOrderMember(String txzMerchantId);

	/**
	 * @Description:  通过主题id获取主题的全部金额
	 * @Param:
	 * @return:
	 * @Author: Hua Qunhao
	 * @Date: 2019-03-06-0006
	 */
	Double findPaymentByEventId(String eventId);

	/**
	* @Author hzq
	* @Description //查找多场活动订单  类型为3的
	* @Date 17:59 2019/5/6
	* @param
	* @return
	**/
	List<OrderForm> getMultipleOrder();

}
